package com.qfjy.homework.xujianyuan;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author:XuJianYuan
 * @date:2023/6/29 16:59
 * @version:1.0
 * 接口的动态代理类
 */
public class MyInterfaceProxyClass implements InvocationHandler {
    //被代理的接口实现类对象
    private Object target;
    //获取动态代理类的实例对象的方法
    public Object getTargetProxyClass(Object target){
        this.target = target;
        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(),this);
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object methodObject = null;
        //接口方法执行之前自己的逻辑代码
        System.out.println("接口方法执行之前，自己的逻辑代码。。。");
        //接口方法执行
        methodObject = method.invoke(target, args);
        //打印执行之后的结果
        System.out.println(methodObject);
        //接口方法执行之后自己的逻辑代码
        System.out.println("接口方法执行之后，自己的逻辑代码。。。");
        //返回接口方法执行后的结果，也就是返回值
        return methodObject;
    }
}
